/***
 * 7-3 还原二叉树 (30 分)
给定一棵二叉树的先序遍历序列和中序遍历序列，要求计算该二叉树的高度。

输入格式:
输入首先给出正整数N（≤50），为树中结点总数。下面两行先后给出先序和中序遍历序列，均是长度为N的不包含重复英文字母（区别大小写）的字符串。

输出格式:
输出为一个整数，即该二叉树的高度。

输入样例:
9
ABDFGHIEC
FDHGIBEAC
结尾无空行
输出样例:
5
结尾无空行
 * ***/

#include "stdio.h"
#include "stdlib.h"
#define N 50
typedef struct biTree
{
    char c;
    struct biTree *lchild, *rchild;
} * BiTree, Node;
void reCreateBiTree(BiTree *t, char *pre, char *in, int len)
{
    Node *p;
    int i;
    if(len<=0)return;
    p = (Node *)malloc(sizeof(Node));
    p->c = pre[0];
    p->lchild = p->rchild = NULL;
    *t = p;
    i=0;
    while (in[i] != pre[0])
        i++;
    reCreateBiTree(&(p->lchild), pre+1,in,i);
    reCreateBiTree(&(p->rchild), pre+i+1,in+i+1,len-i-1);
}
// void inorder(BiTree t)
// {
//     if (!t)
//         return;
//     inorder(t->lchild);
//     printf("%c", t->c);
//     inorder(t->rchild);
// }
int max(int a, int b)
{
    return a > b ? a : b;
}
int getHeight(BiTree t)
{
    if (t)
        return max(getHeight(t->lchild), getHeight(t->rchild)) + 1;
    else
        return 0;
}
int main(int argc, char const *argv[])
{
    char preList[N+5], inList[N+5];
    int l;
    BiTree t;
    // freopen("d:\\a.txt", "r", stdin);
    scanf("%d\n", &l); //把缓冲区里面的换行读走
    gets(preList);
    gets(inList);
    reCreateBiTree(&t, preList, inList, l);
    // inorder(t);
    // printf("\n");
    printf("%d\n", getHeight(t));
    return 0;
}
